#pragma once

#include <string>
#include <memory>
#include <spdlog/spdlog.h>
#include <spdlog/sinks/rotating_file_sink.h>

/**
 * @class Logger
 * @brief 交易系统日志管理类
 * @details 基于spdlog实现的多线程安全日志系统，支持不同级别的日志记录
 *          提供debug、info、warning、error四种日志级别
 */
class Logger {
public:
    /**
     * @brief 初始化日志系统
     * @param filename 日志文件名
     * @param max_size 单个日志文件最大大小(字节)，默认10MB
     * @param max_files 最大保留日志文件数，默认3个
     * @throws std::runtime_error 当日志初始化失败时抛出
     */
    static void init(const std::string& filename, size_t max_size = 10485760, size_t max_files = 3);
    
    template<typename... Args>
    static void debug(const std::string& fmt, Args... args) {
        if (s_logger) s_logger->debug(fmt, args...);
    }
    
    template<typename... Args>
    static void info(const std::string& fmt, Args... args) {
        if (s_logger) s_logger->info(fmt, args...);
    }
    
    template<typename... Args>
    static void warning(const std::string& fmt, Args... args) {
        if (s_logger) s_logger->warn(fmt, args...);
    }
    
    template<typename... Args>
    static void error(const std::string& fmt, Args... args) {
        if (s_logger) s_logger->error(fmt, args...);
    }

private:
    static std::shared_ptr<spdlog::logger> s_logger;
};